<?php
class GyujtokController extends AppController {

	var $name = 'Gyujtok';

	function isAuthorized(){
		if($this->Auth->user('csoport') == 1){		//admin jogosultságú júzerek
			return true;
		}
		elseif($this->Auth->user('csoport') == 2){      //könyvelők
			return true;
      }
		elseif($this->request->action == 'ceg' || $this->request->action == 'search'){
			return true;
		}
		return false;		//minden más tiltva
	}


	function index() {
		$this->Gyujto->recursive = 0;
		$this->set('gyujtok', $this->paginate());
	}

	function view($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Invalid Gyujto.'));
			$this->redirect(array('action'=>'index'));
		}
		$this->set('gyujto', $this->Gyujto->read(null, $id));
	}

	function add() {
		if (!empty($this->request->data)) {
			$this->Gyujto->create();
			if ($this->Gyujto->save($this->request->data)) {
				$this->Session->setFlash(__('The Gyujto has been saved'));
				$this->redirect(array('action'=>'index'));
			} else {
				$this->Session->setFlash(__('The Gyujto could not be saved. Please, try again.'), 'default', array('class' => 'alert'));
			}
		}
		//$osztalyok = $this->Gyujto->Osztaly->find('list');
		//$tetelek = $this->Gyujto->Tetel->find('list');
		$gyujtotipusok = $this->Gyujto->Gyujtotipus->find('list', array('fields' => array('Gyujtotipus.nev')));
		$this->set(compact('osztalyok', 'tetelek', 'gyujtotipusok'));
	}

	function edit($id = null) {
		if (!$id && empty($this->request->data)) {
			$this->Session->setFlash(__('Invalid Gyujto'));
			$this->redirect(array('action'=>'index'));
		}
		if (!empty($this->request->data)) {
			if ($this->Gyujto->save($this->request->data)) {
				$this->Session->setFlash(__('The Gyujto has been saved'));
				$this->redirect(array('action'=>'index'));
			} else {
				$this->Session->setFlash(__('The Gyujto could not be saved. Please, try again.'), 'default', array('class' => 'alert'));
			}
		}
		if (empty($this->request->data)) {
			$this->request->data = $this->Gyujto->read(null, $id);
		}
		$osztalyok = $this->Gyujto->Osztaly->find('list');
		$tetelek = $this->Gyujto->Tetel->find('list');
		$gyujtotipusok = $this->Gyujto->Gyujtotipus->find('list');
		$this->set(compact('osztalyok','tetelek','gyujtotipusok'));
	}

	function delete($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Invalid id for Gyujto. Please, try again.'), 'default', array('class' => 'alert'));
			$this->redirect(array('action'=>'index'));
		}
		if ($this->Gyujto->delete($id)) {
			$this->Session->setFlash(__('Gyujto deleted'));
			$this->redirect(array('action'=>'index'));
		}
	}

	
/*
 todo: új gyujtő hozzáadásánál amennyiben a gyujtotpius_id = $settings['ceg_gyujtotipusId']
 akkor le kell futtatni egy view létrehozást is
 
 $ujGyujtoId - az új gyüjtő id-je
 
 CREATE VIEW
	`v_ceg'.$ujGyujtoId.'_tetelek` AS
	(SELECT `tetelek`.`id` AS `id`,`tetelek`.`bizonylat_id` AS `bizonylat_id`,`tetelek`.`sorszam` AS `sorszam`,
				`tetelek`.`szoveg` AS `szoveg`,`tetelek`.`osszeg` AS `osszeg`,`tetelek`.`t` AS `t`,`tetelek`.`k` AS `k`,
				`tetelek`.`spec` AS `spec`
	FROM (
		`tetelek`, `bizonylatok`, `osztalyok`
		WHERE `tetelek`.`bizonylat_id` = `bizonylatok`.`id`
		AND `osztalyok`.`id` = `bizonylatok`.`osztaly_id`
		AND `osztalyok`.`id` in (
				SELECT `osztalyok`.`id` AS `id`
				FROM `osztalyok`, `gyujtok_osztalyok`, `gyujtok`
					WHERE `gyujtok`.`id` = '.$ujGyujtoId.'
					AND `gyujtok_osztalyok`.`gyujto_id` = `gyujtok`.`id`
					AND `gyujtok_osztalyok`.`osztaly_id` = `osztalyok`.`id`
					)
		)
	)
 
*/
	
	function search(){
		//ajaxos keresés a gyûjtõkben
		Configure::write('debug', 0);
		$reszlet = $this->request->data['Tetel']['gyujto'] .
						$this->request->data['_Tetel']['gyujto'] .
						$this->request->data['Gyujto']['gyujto'] .
						@$this->params->query['term'] ;
		$this->set('searchResults',
					  $this->Gyujto->find('all',
								array(
									'conditions' => "Gyujto.nev LIKE '%$reszlet%' OR Gyujto.kod LIKE '$reszlet%'",
									'fields' => array('Gyujto.id', 'Gyujto.kod', 'Gyujto.nev'),
									'order' => 'Gyujto.nev ASC',
									'limit' => 5,
									'offset' => $this->request->data['offset'],
									'recursive' => -1
								)
								));
		$this->set('jQ', isset($this->params->query['term']) ? true : false);
		$this->render('searchResults','ajax');
	}

/**
 * Elérhető cégek listája
 *
 * @param int $id a kiválasztott cég id-je
 * @param int ev 	 kiválasztott év
 *
 */
	function ceg($id = null, $ev = null){
		$cegId = $this->Setting->getRow('ceg_gyujtotipusId');
		$hozzaferhetoCegek = is_numeric($this->Auth->user('cegek')) ? $this->Auth->user('cegek') : unserialize($this->Auth->user('cegek'));
		$cegek = $this->Gyujto->find('all', array(
													'recursive'		=> -1,
													'conditions'	=> array(
																				'gyujtotipus_id' => $cegId['Setting']['value'],
																				'Gyujto.id' => $hozzaferhetoCegek
																				),
													'fields'			=> array('id', 'nev')
												));
		//debug($cegek);
		
		$cegIdk = array();
		foreach($cegek as $c){
			$cegIdk[] = $c['Gyujto']['id'];
		}
		//melyik cégnek melyik évre van már számlái? feltételezzük, hogy ezek az akív évei
		$_cegEvek = $this->Gyujto->Szamla->find('all',
														array(
															'recursive' => -1,
															'fields' => array('ceg_id', 'ev'),
															'conditions' => array(
																					'ceg_id' => $cegIdk,
																					'ev != 0'
																					),
															'group' => array('ev', 'ceg_id'),
															'order' => array('ceg_id', 'ev')
														 ));
		//debug($_cegEvek);
		$cegEvek = array();
		foreach($_cegEvek as $c){
			if(!array_key_exists($c['Szamla']['ceg_id'], $cegEvek))
				$cegEvek[$c['Szamla']['ceg_id']] = array();
			array_push($cegEvek[$c['Szamla']['ceg_id']], $c['Szamla']['ev']);
		}
		//debug($cegEvek);
		
		//olvasszuk össze az éveket a cég tömbbel
		foreach($cegek as $i => $ceg){
			$cegek[$i]['Gyujto']['evek'] = $cegEvek[$ceg['Gyujto']['id']];
		}
		//debug($cegek);
		$this->Session->write('Settings.cegek', $cegek);
		$this->set('cegek', $cegek);

		if($id){
			//kaptunk egy $id-t nézzük meg, hogy a usernek van-e joga hozzá
			$hozzafer = false;
			if(count($cegek) > 0){
				foreach($cegek as $c){
					if($id == $c['Gyujto']['id'])
						$hozzafer = true;
				}
			}

			if(!$hozzafer){
				$this->Session->setFlash('Ehhez a céghez nem férhetsz hozzá, válassz másikat!');
				$this->redirect(array('action' => 'ceg'));
			}
			else{
				//a hozzáférés az adott céghez biztosítva van
				//már választttunk évet
				if($ev){
					$gyujto = $this->Gyujto->find('first',
									  array(
											'fields' => array('nev'),
											'conditions' => array('id' => $id),
											'recursive' => -1
											)
									  );
					//debug($gyujto);
					$this->Session->write('Settings.cegId', $id);
					$this->Session->write('Settings.cegNev', $gyujto['Gyujto']['nev']);
					$this->Session->write('Settings.ev', $ev);
					
					//mentsük el a settings táblába is, hogy a következő belépésnél ugyanoda jusson
					$this->Setting->save(array(
													'Setting' => array(
 																			'id' => 'user_' . $this->Auth->user('id'),
																			'description' => serialize(array(
																											'cegId' => $id,
																											'cegNev' => $gyujto['Gyujto']['nev'],
																											'ev' => $ev))
																			 )));
					
					//és irányítsuk tovább a bizonylatok nyitóoldalára
					$this->redirect(array('controller' => 'bizonylatok'));
				}
			}
		}
	}

/*
 * Nem használt gyüjtők listája
*/
	function nemhasznalt($ev){
		
	}
	
}
?>